【Ant Trip】题解 | 您所在的位置:网站首页 › 不 笔画格式 › 【Ant Trip】题解 |
题目描述
给你无向图的n个点和m条边,保证这m条边都不同且不会存在同一点的自环边,现在问你至少要几笔才能所有边都画一遍。(一笔画的时候笔不离开纸) 输入格式 多组数据,每组数据用空行隔开。 对于每组数据,第一行两个整数n, m表示点数和边数。接下去m行每行两个整数a, b,表示a, b之间有一条边。 输出格式 对于每组数据,输出答案。 样例输入 3 3 1 2 2 3 1 3 4 2 1 2 3 4 样例输出 1 2 分析做这道题,首先我们需要知道这些: 若一张图只有一个点,那么一笔都不需要画 假如他是一个半欧拉图,那么也只需要一笔 以上两种都不是的话,那么我们需要画的笔数应该等于这张图中度为奇数的点数之和除以 2那么我们怎么判断是否为一个欧拉图呢?暴搜?记得雷老师说过,假如一张图是欧拉图,那么他的所有点的度应该都是偶数。 其实这道题的题目并没有说所给出的数据是一张连通图,所以我们又可以用一个并查集来求出每一个联通分量,并用一个数组来存储这个联通分量之中的度为奇数的点的个数(好像有点啰嗦) 看懂了的话,可以自己实现一遍,发现有问题再看代码吧~ 代码 #include #include #include #include #include using namespace std; const int MAXN = 1e5 * 2 + 5; int fa[MAXN]; int in[MAXN]; int num[MAXN]; int ans[MAXN]; int Find (int x) { if (fa[x] != x) fa[x] = Find (fa[x]); return fa[x]; }//找爸爸 int main() { int n, m; while ((scanf("%d %d", &n, &m)) != EOF) { for (int i = 1; i |
CopyRight 2018-2019 实验室设备网 版权所有 |